package org.omg.dds.rpc;

import org.omg.dds.domain.DomainParticipant;
import org.omg.dds.sub.DataReaderQos;
import org.omg.dds.pub.DataWriterQos;
import org.omg.dds.core.Duration;
import java.util.concurrent.Future;
import java.lang.String;

public abstract class Requester <TReq, TRep> 
{
  // Creates a Requester with the minimum set of parameters. 
  public Requester (DomainParticipant participant, 
                    String serviceName)
  {}

  public Requester (DomainParticipant participant, 
                    String serviceName,
                    String instanceName)
  {}
             
  // Creates a Requester with parameters. 
  public Requester (RequesterParams params) 
  {}
  
  abstract public void call(TRep reply, TReq request, Duration duration); 

  abstract public void call(Sample<TRep> sample, TReq request, Duration duration); 

  abstract public LoanedSamples<TRep> call(TReq request, Duration duration);

  abstract public Future<Sample<TRep> > callAsync(TReq request);

  abstract public void setRequestDataWriterQos(DataWriterQos dwqos);

  abstract public void setReplyDataReaderQos(DataReaderQos drqos);
  
  abstract public boolean bind(String instanceName);
  
  abstract public boolean unbind();
  
  abstract public boolean getServiceInfo();
  
  abstract public boolean isBound(String boundInstance);
};

